package chapter06

/**
 * Created with IntelliJ IDEA.
 * ClassName: Test05_Constructor
 * Package: chapter06
 * Description:
 * User: fzykd
 *
 * @Author: LQH
 *          Date: 2023-06-22
 *          Time: 18:08
 */

//构造器
object Test05_Constructor {
  def main(args: Array[String]): Unit = {
    //new Student() 就相当于调用了主构造器
    val student1 = new Student1()
    //调用同名得一般方法
    student1.student1()

    val student2 = new Student1("alice")
    val student3 = new Student1("bbb",20)
    //1.主构造方法被调用
    //函数名和类名一样 这里不是和Java一样构造方法 而是普通方法
    //1.主构造方法被调用
    //2.辅助构造方法一被调用
    //name :alice age:0
    //1.主构造方法被调用
    //2.辅助构造方法一被调用
    //name :bbb age:0
    //3.辅助构造方法二被调用
    //name: bbb age: 20

  }
}

//定义一个类
class Student1() {
  //属性
  var name: String = _
  var age: Int = _


  println("1.主构造方法被调用")

  //声明辅助构造方法
  def this(name: String) {
    this() //直接调用主构造器
    println("2.辅助构造方法一被调用")
    this.name = name
    println(s"name :${name} age:${age}")
  }

  //声明多个辅助构造器
  def this(name: String, age: Int) {
    this(name) //简介调用主构造器 this(name)会先调用this()
    println("3.辅助构造方法二被调用")
    //this.name = name name在方法一种调用过了
    this.age = age
    println(s"name: ${name} age: ${age}")
  }

  def student1():Unit= {
    println("函数名和类名一样 这里不是和Java一样构造方法 而是普通方法")
  }


}
